package com.yang.service;

import com.yang.domain.dto.Result;
import com.yang.domain.dto.ScrollResult;
import com.yang.domain.dto.UserDTO;
import com.yang.domain.entity.Blog;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;


/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author yang
 * @since 2022-10-22
 */
public interface IBlogService extends IService<Blog> {

    /**
     * 根据id查询博客
     * @param id 博客id
     * @return 博客详细信息
     */
    Blog queryBlogById(Long id);

    /**
     * 用户对于博客点赞，基于SortedSet实现了用户只能点赞一致，并且对于点赞的博客进行排行
     * @param id 点赞的id
     *
     */
    void likeBlog(Long id);

    /**
     * 当作者发布完探店笔记的时候
     * 推模式：将写完的博客去推送到狂热粉丝里面，告诉他们博客更新了
     * 拉模式：在将另一份放入到收件箱里面，等普通粉丝来读取
     * @param blog 写完的博客参数
     * @return 博客id
     */
    Long saveBlog(Blog blog);

    /**
     * 分页查询博客
     * @param current 分页参数
     * @return 查询结果
     */
    List<Blog> queryHotBlog(Integer current);

    /**
     * 查询博客点赞人数的排行榜，根据时间排序
     * @param id 博客的id
     * @return 点赞人的集合
     */
    List<UserDTO> queryBlogLikes(Long id);

    /**
     * 从关注的人里面读取他们发布的博客信息(滚动箱模式)
     * @param max 上一次查询的最小时间
     * @param offset 偏移量
     * @return 返回滚动箱数据
     */
    ScrollResult queryBlogOfFollow(Long max, Integer offset);

    /**
     * 查看某个用户的博客信息，按照点赞数倒序排行
     * @param current current
     * @param id 用户id
     * @return 用户的博客集合
     */
    List<Blog> queryBlogByUserId(Integer current, Long id);

    /**
     * 查询我的博客
     * @param current 当前页
     * @return 我的博客集合
     */
    List<Blog> queryMyBlog(Integer current);
}
